/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.marcelo.agro.core;

import java.util.prefs.Preferences;
import org.marcelo.agro.constantes.IConstantes;
import org.openide.modules.ModuleInstall;
import org.openide.util.NbPreferences;

/**
 *
 * @author marcelo
 * La idea de esta clase es la de crear la estructura de para la base de datos
 * de la aplicacion, para ello el metodo restore debe realizar una consulta, si se produce una excepcion 
 * entonces se procede a crear la base de datos, este es una manera muy rudimentaria para comprobar si esta o no
 * Creada la base de datos, buscare una manera mas correcta de implementar esta funcionalidad
 * Si la base de datos es modificada debe ser recreada, sino, no pasa nada, la version no se cambia, al momento de la instalacio
 * insertar los datos
 * 
 * 
 */
public class Installer extends ModuleInstall {
    
    
    private static String KEY_BASE_DATOS = "version_bbdd";
    private static String VERSION_BBDD="0.1";
    private static String KEY_APP = "version_app";
    private static String VERSION_APP="0.1";
    
    //Todos los datos se traen de las constantes del sistema
    private static String KEY_SCHEMA_NAME = "schemaName";
    private static String schemaName = IConstantes.BBDD_schemaName;
    private static String KEY_DELIMITADOR_COLUMNA = "delimitadorColumna";
    private static String delimitadorColumna =IConstantes.BBDD_delimitadorColumna;
    private static String KEY_DELIMITADOR_CARACTER = "delimitadorCaracter";
    private static String delimitadorCaracter = IConstantes.BBDD_delimitadorCaracter;
    private static String KEY_ENCODING ="encoding";
    private static String encoding =IConstantes.BBDD_ecoding;
    
    private static String KEY_UNIDAD_MEDIDA_SUPERFICIE_PREFERIDA = IConstantes.PREF_keyUnidadMedidaSuperficie;
    
    
   @Override
    public void restored() {
       /**
        * Consultar la version de la aplicacion en la base de datos
        * a partir de las propiedades de netbeans
        * si la version no coincide puedo cambiar los datos del archivo de propiedades y
        * volver a crear la base de datos, es mas en el momento de la instalacion 
        * podria crear el archivo de configuracion
        * 
        * Pasos
        * Check si la preferencia
        * Check si existe la base de datos
        * Check la version de la base de datos
        * Check Datos importantes
        * 
        * Cargar datos
        * 
        */
       super.restored();
       Preferences nodo = NbPreferences.root();
       GlobalContext.getInstance().Logger().println("Iniciando sistema: ");
       if (! nodo.get(KEY_BASE_DATOS, "").equals(VERSION_BBDD) ) {
           initTablas();
           nodo.put(KEY_BASE_DATOS,VERSION_BBDD );
       }
//       crear todas las preferencias del sistema
       initPref(nodo);
       

    }
    
    /**
     * Metodo para inicializar las tablas, primero realizar una consulta en la base de datos, si se produce 
     * una excepcion comenzar a crear las tablas, sino esta todo OK.
     */
    private void initTablas() {
        //Llamar a todas las interfaces, recargar los datos
        //finalmente recrear la version
        //llamar a las interfaces y ejecutar la actualizacion desde las interfaces
        //No desde el helper
        GlobalContext.getInstance().Logger().println("Iniciando Creando tablas: ");
        Helper.initBBDD(Helper.FUNCION.CREATE);
    
    }

    @Override
    public void close() {
        Helper.currentSession().close();
    }
    
    private void initPref(Preferences nodo) {
        GlobalContext.getInstance().Logger().println("Iniciando preferencias: ");
        if (nodo.get(KEY_SCHEMA_NAME, "").equals("")) {
            nodo.put(KEY_SCHEMA_NAME, schemaName);
        }
        if (nodo.get(KEY_DELIMITADOR_COLUMNA, "").equals("")) {
            nodo.put(KEY_DELIMITADOR_COLUMNA, delimitadorColumna);
        }
        if (nodo.get(KEY_DELIMITADOR_CARACTER, "").equals("")) {
            nodo.put(KEY_DELIMITADOR_CARACTER, delimitadorCaracter);
        }
        if (nodo.get(KEY_ENCODING, "").equals("")) {
            nodo.put(KEY_ENCODING, encoding);
        }
        if (nodo.get(KEY_UNIDAD_MEDIDA_SUPERFICIE_PREFERIDA, "").equals("")){
            nodo.put(KEY_UNIDAD_MEDIDA_SUPERFICIE_PREFERIDA, "3");
        }
        
    }
    
    
}